function yqtr = mth2qtr(ymth,flag)
% PURPOSE: converts monthly time-series to quarterly averages
%---------------------------------------------------
% USAGE:  yqtr = mth2qtr(ymth)
% where:  ymth = monthly time series vector or matrix (nobs x k)
%         flag = 0 for averages (default) and 1 for sums
%---------------------------------------------------
% RETURNS: yqtr = quarterly time-series vector or matrix
%                 [floor(nobs/3) + 1] in length by k columns
%---------------------------------------------------
% NOTES:  the last observation is the actual month or
%         the average (sum) of the last 2 months in cases where
%         nobs/3 has a remainder               
%---------------------------------------------------

% written by:
% James P. LeSage, Dept of Economics
% Texas State University-San Marcos
% 601 University Drive
% San Marcos, TX 78666
% jlesage@spatial-econometrics.com

[nobs qvar] = size(ymth);
denom = ones(1,qvar)*3.0;
robs = rem(nobs,3);
if nargin == 1
flag = 0;
end;

switch robs

case 0
cnt = 1;
yqtr = zeros(nobs/3,qvar);
for i=1:3:nobs-2
if flag == 0
yqtr(cnt,:) = (ymth(i,:) + ymth(i+1,:) + ymth(i+2,:))./denom;
else
yqtr(cnt,:) = (ymth(i,:) + ymth(i+1,:) + ymth(i+2,:));
end;
cnt = cnt+1;
end;

case 1
cnt = 1;
qobs = floor(nobs/3) + 1;
yqtr = zeros(qobs,qvar);
for i=1:3:nobs-2
if flag == 0
yqtr(cnt,:) = (ymth(i,:) + ymth(i+1,:) + ymth(i+2,:))./denom;
else
yqtr(cnt,:) = (ymth(i,:) + ymth(i+1,:) + ymth(i+2,:));
end;
cnt = cnt+1;
end;
yqtr(cnt,:) = ymth(nobs,:);

case 2
cnt = 1;
qobs = floor(nobs/3) + 1;
yqtr = zeros(qobs,qvar);
for i=1:3:nobs-2
if flag == 0
yqtr(cnt,:) = (ymth(i,:) + ymth(i+1,:) + ymth(i+2,:))./denom;
else
yqtr(cnt,:) = (ymth(i,:) + ymth(i+1,:) + ymth(i+2,:));
end;
cnt = cnt+1;
end;
if flag == 0
yqtr(cnt,:) = (ymth(nobs-1,:)+ymth(nobs,:))/2;
else
yqtr(cnt,:) = (ymth(nobs-1,:)+ymth(nobs,:));
end;

end